#ifndef USUARIO_H
#define USUARIO_H
#include <string>
#include "Configuracion.h"
#include <jsoncpp/json/json.h>
#include "Mensaje.h"
#include "Conexion.h"
class Partido;

class Usuario {
  public:
    Usuario();
    Usuario(std::string nombre, std::string password);
    virtual ~Usuario();
    /** Getters */
    std::string getPassword() {
        return this->password;
    }
    std::string getNombre() {
        return this->nombre;
    }
    int getNivel() {
        return this->nivel;
    }
    void setNivel(int nivel) {
        this->nivel = nivel;
    }
    int  getUID() {
        return this->uid;
    }
    void setUID(int uid) {
        this->uid = uid;
    }
    /** Setters */
    void setPassword(std::string password) {
        this->password = password;
    }
    void setNombre(std::string nombre) {
        this->nombre = nombre;
    }

    void setConexion(Conexion *c) {
        this->conexion = c;
    }
    Conexion *getConexion() {
        return this->conexion;
    }

    Partido *getPartido() {
        return this->partido;
    }
    void setPartido(Partido *partido);

    void aJson(Json::Value &j_usuario);
    void getDetalles(Json::Value &detalles);

    void imprimir();

    int enviar(Mensaje &mensaje);

    void desconectar();

    bool estaConectado();

    bool autenticado();

    void quitarDePartido();

    void inicializar();

    bool jugando();
    bool tienePartido();

    void aumentarNivel();

  protected:
    std::string nombre, password;
    Partido *partido;
    Conexion *conexion;
    int uid;
    int nivel;
};

#endif // USUARIO_H
